
var store_combo;
var store_editor;

Ext.onReady(function()
{
    store_padres = new X.store.Json({
        fields : [
            'codigoRubro',
            'nombreRubro',
            'codigo',
            'codigoNombre',
            'egreso'
        ]
    });

    //concatenar codigo y nombre del rubro, para mostrar en el combo de eleccion del padre
    store_padres.addListener('load', function(store, records, options){
    for(var i=0; i<store.getCount(); i++){
           var record = store.getAt(i);
           record.set('codigoNombre', record.get('codigo') + ' ' + record.get('nombreRubro'));
       }
    });

    var form = new X.form.FormPanel({

        title            : 'Editar Rubro',
        submitButtonText : 'Editar',
        returnButtonText : 'Cancelar',
        submitUrl        : '/rubro/ajax-editar',
        returnUrl        : '/rubro/listar',
        width            : 650,
        labelWidth       : 70,

        items:[
            new Ext.form.FieldSet({title:'Rubro',items:
            [
                new X.field.Hidden({id:'rubroPK'}),             //llave primaria del rubro editado
                new X.field.Hidden({id:'cantHijos'}),           //cantidad de hijos del rubro editado
                new X.field.Hidden({id:'originalTipo'}),        //ingreso o egreso antes de edit
                new X.field.Hidden({id:'originalTerminal'}),    //terminal o no terminal antes de edit
                new X.field.Hidden({id:'originalFullCodigo'}),    
                new X.field.Hidden({id:'originalPadre'}),

                //padre
                new X.field.Combo({
                        hiddenName   : 'codigoPadre',
                        fieldLabel   : 'Rubro Padre',
                        valueField   : 'codigoRubro',
                        displayField : 'codigoNombre',
                        id           : 'rubroPadre',
                        allowBlank   : true,
                        width        : 485,
                        store        : store_padres,
                        triggerAction: 'all',
                        lastQuery    : '',
 			   editable     : true
                }), 

                //checkbox es terminal o no
                new X.field.Checkbox ({fieldLabel: 'Rubro Terminal', id: 'checkTerminal',
                                        inputValue:'T'
                                       }),

                //Código completo actual del rubro en edición
                new X.field.Text  ({fieldLabel:'Código actual',        id:'codigoActual', width:485, disabled: true}),
                //Campo para editar terminación o código completo del rubro
                new X.field.Text  ({fieldLabel:'Nuevo código',   id:'codigoNuevo', width:485, maskRe: /[0-9.]/}),
                
                new X.field.RadioGroup({fieldLabel:'Tipo', id:'tipoRubro', boxMaxWidth: 260,
                                items: [
                                    {boxLabel: 'Egreso', name: 'rb-auto', id: 'radioE'
                                        ,listeners:{
                                            check: function() {
                                                if(radioE.checked){
                                                    var originalTipo = Ext.getCmp('originalTipo');
                                                    if (originalTipo.getValue()=='I'){
                                                        X.msg.Failure('No se puede cambiar de tipo');
                                                        Ext.getCmp('radioI').setValue(true);
                                                        Ext.getCmp('tipo').setValue('I');
                                                    }
                                                    else{
                                                        Ext.getCmp('tipo').setValue('E');
                                                        filtro_padres(true);
                                                    }
                                                } 
                                            }
                                        }
                                    },
                                    {boxLabel: 'Ingreso', name: 'rb-auto', id: 'radioI'
                                        ,listeners:{
                                            check: function() {
                                                if(radioI.checked){
                                                    var originalTipo = Ext.getCmp('originalTipo');
                                                    if (originalTipo.getValue()=='E'){
                                                        X.msg.Failure('No se puede cambiar de tipo');
                                                        Ext.getCmp('radioE').setValue(true);
                                                        Ext.getCmp('tipo').setValue('E');
                                                    }
                                                    else{
                                                        Ext.getCmp('tipo').setValue('I');
                                                        filtro_padres(false);
                                                    }
                                                }
                                            }
                                        }
                                    }
                                 ]}),
               new X.field.Hidden({id:'tipo'}),

               new X.field.Text  ({fieldLabel:'Descripcion',   id:'nombreRubro', width:485}),

               new X.field.RadioGroup({fieldLabel:'Proposito', id:'propositoRubro', boxMaxWidth: 260,
                                items: [
                                    {boxLabel: 'Especifico', name: 'rb', id: 'radioEspe'},
                                    {boxLabel: 'General',    name: 'rb', id: 'radioGral',
                                            listeners: {
                                                check: function () {
                                                      if(radioGral.checked)
                                                          Ext.getCmp('proposito').setValue('G');
                                                      if(radioEspe.checked)
                                                          Ext.getCmp('proposito').setValue('E');
                                                }
                                            }
                                    }
                                 ]}),
                new X.field.Hidden({id:'proposito'}),
               
            ]})
        ]

        
    });

    //funcion para filtrar las opciones de rubros padres, de acuerdo si se elige
    //sea un rubro de ingreso o de egreso
    function filtro_padres(sel){
        try{
            store_padres.getAt(0).set('egreso', sel);
            store_padres.filter('egreso', sel, false, false);
//            Ext.getCmp('rubroPadre').setValue(0);
        }
        catch(e){
            alert(e.message);
        }
    }


    //verificacion de campos antes del submit
    form.getForm().addListener('beforeaction', function(form, action){
        var padre               = Ext.getCmp('rubroPadre').getValue();
        var originalPadre       = Ext.getCmp('originalPadre').getValue();
        var hijos               = Ext.getCmp('cantHijos').getValue();
        var terminal            = Ext.getCmp('checkTerminal');
 
        if (Ext.isEmpty(Ext.getCmp('nombreRubro').getValue())){
            X.msg.Failure('Complete el campo "Descripcion"'); return false;
        }
        if (Ext.isEmpty(Ext.getCmp('codigoNuevo').getValue())){
            X.msg.Failure('Complete el campo "Codigo"'); return false;
        }else{
            if(/^(\.).*/.test(Ext.getCmp('codigoNuevo').getValue())){
                alert('El código no puede iniciar con un punto');
                return false;
            }
            if(/.*(\.)$/.test(Ext.getCmp('codigoNuevo').getValue())) {
                alert('El código no puede finalizar con un punto');
                return false;
            }
            if(/.*\.\..*/.test(Ext.getCmp('codigoNuevo').getValue())) {
                alert('El código no puede contener dos puntos seguidos');
                return false;
            }
        }
        
        if (terminal.checked){
            if(padre==0){
                X.msg.Failure('Un rubro sin padre no puede ser terminal');
                terminal.setValue(false); return false;
            }
            else if(hijos!=0){
                X.msg.Failure('El rubro tiene hijos, no puede ser terminal');
                terminal.setValue(false); return false;
            }            
        }
        return true;
    });



    
});
